//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2024 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto-codegenerator.
// DO NOT EDIT.

#if canImport(FoundationEssentials)
import FoundationEssentials
#else
import Foundation
#endif
@_exported import SotoCore

/// Service object for interacting with AWS ResourceExplorer2 service.
///
/// Amazon Web Services Resource Explorer is a resource search and discovery service. By using Resource Explorer, you can explore your resources using an internet search engine-like experience. Examples of resources include Amazon Relational Database Service (Amazon RDS) instances, Amazon Simple Storage Service (Amazon S3) buckets, or Amazon DynamoDB tables. You can search for your resources using resource metadata like names, tags, and IDs. Resource Explorer can search across all of the Amazon Web Services Regions in your account in which you turn the service on, to simplify your cross-Region workloads. Resource Explorer scans the resources in each of the Amazon Web Services Regions in your Amazon Web Services account in which you turn on Resource Explorer. Resource Explorer creates and maintains an index in each Region, with the details of that Region's resources. You can search across all of the indexed Regions in your account by designating one of your Amazon Web Services Regions to contain the aggregator index for the account. When you promote a local index in a Region to become the aggregator index for the account, Resource Explorer automatically replicates the index information from all local indexes in the other Regions to the aggregator index. Therefore, the Region with the aggregator index has a copy of all resource information for all Regions in the account where you turned on Resource Explorer. As a result, views in the aggregator index Region include resources from all of the indexed Regions in your account. For more information about Amazon Web Services Resource Explorer, including how to enable and configure the service, see the Amazon Web Services Resource Explorer User Guide.
public struct ResourceExplorer2: AWSService {
    // MARK: Member variables

    /// Client used for communication with AWS
    public let client: AWSClient
    /// Service configuration
    public let config: AWSServiceConfig

    // MARK: Initialization

    /// Initialize the ResourceExplorer2 client
    /// - parameters:
    ///     - client: AWSClient used to process requests
    ///     - region: Region of server you want to communicate with. This will override the partition parameter.
    ///     - partition: AWS partition where service resides, standard (.aws), china (.awscn), government (.awsusgov).
    ///     - endpoint: Custom endpoint URL to use instead of standard AWS servers
    ///     - middleware: Middleware chain used to edit requests before they are sent and responses before they are decoded 
    ///     - timeout: Timeout value for HTTP requests
    ///     - byteBufferAllocator: Allocator for ByteBuffers
    ///     - options: Service options
    public init(
        client: AWSClient,
        region: SotoCore.Region? = nil,
        partition: AWSPartition = .aws,
        endpoint: String? = nil,
        middleware: AWSMiddlewareProtocol? = nil,
        timeout: TimeAmount? = nil,
        byteBufferAllocator: ByteBufferAllocator = ByteBufferAllocator(),
        options: AWSServiceConfig.Options = []
    ) {
        self.client = client
        self.config = AWSServiceConfig(
            region: region,
            partition: region?.partition ?? partition,
            serviceName: "ResourceExplorer2",
            serviceIdentifier: "resource-explorer-2",
            serviceProtocol: .restjson,
            apiVersion: "2022-07-28",
            endpoint: endpoint,
            variantEndpoints: Self.variantEndpoints,
            errorType: ResourceExplorer2ErrorType.self,
            middleware: middleware,
            timeout: timeout,
            byteBufferAllocator: byteBufferAllocator,
            options: options
        )
    }




    /// FIPS and dualstack endpoints
    static var variantEndpoints: [EndpointVariantType: AWSServiceConfig.EndpointVariant] {[
        [.dualstack, .fips]: .init(endpoints: [
            "ca-central-1": "resource-explorer-2-fips.ca-central-1.api.aws",
            "ca-west-1": "resource-explorer-2-fips.ca-west-1.api.aws",
            "us-east-1": "resource-explorer-2-fips.us-east-1.api.aws",
            "us-east-2": "resource-explorer-2-fips.us-east-2.api.aws",
            "us-west-1": "resource-explorer-2-fips.us-west-1.api.aws",
            "us-west-2": "resource-explorer-2-fips.us-west-2.api.aws"
        ]),
        [.fips]: .init(endpoints: [
            "ca-central-1": "resource-explorer-2-fips.ca-central-1.amazonaws.com",
            "ca-west-1": "resource-explorer-2-fips.ca-west-1.amazonaws.com",
            "us-east-1": "resource-explorer-2-fips.us-east-1.amazonaws.com",
            "us-east-2": "resource-explorer-2-fips.us-east-2.amazonaws.com",
            "us-west-1": "resource-explorer-2-fips.us-west-1.amazonaws.com",
            "us-west-2": "resource-explorer-2-fips.us-west-2.amazonaws.com"
        ])
    ]}

    // MARK: API Calls

    /// Sets the specified view as the default for the Amazon Web Services Region in which you call this operation. When a user performs a Search that doesn't explicitly specify which view to use, then Amazon Web Services Resource Explorer automatically chooses this default view for searches performed in this Amazon Web Services Region. If an Amazon Web Services Region doesn't have a default view configured, then users must explicitly specify a view with every Search operation performed in that Region.
    @Sendable
    @inlinable
    public func associateDefaultView(_ input: AssociateDefaultViewInput, logger: Logger = AWSClient.loggingDisabled) async throws -> AssociateDefaultViewOutput {
        try await self.client.execute(
            operation: "AssociateDefaultView", 
            path: "/AssociateDefaultView", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Sets the specified view as the default for the Amazon Web Services Region in which you call this operation. When a user performs a Search that doesn't explicitly specify which view to use, then Amazon Web Services Resource Explorer automatically chooses this default view for searches performed in this Amazon Web Services Region. If an Amazon Web Services Region doesn't have a default view configured, then users must explicitly specify a view with every Search operation performed in that Region.
    ///
    /// Parameters:
    ///   - viewArn: The Amazon resource name (ARN) of the view to set as the default for the Amazon Web Services Region and Amazon Web Services account in which you call this operation. The specified view must already exist in the called Region.
    ///   - logger: Logger use during operation
    @inlinable
    public func associateDefaultView(
        viewArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> AssociateDefaultViewOutput {
        let input = AssociateDefaultViewInput(
            viewArn: viewArn
        )
        return try await self.associateDefaultView(input, logger: logger)
    }

    /// Retrieves details about a list of views.
    @Sendable
    @inlinable
    public func batchGetView(_ input: BatchGetViewInput, logger: Logger = AWSClient.loggingDisabled) async throws -> BatchGetViewOutput {
        try await self.client.execute(
            operation: "BatchGetView", 
            path: "/BatchGetView", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves details about a list of views.
    ///
    /// Parameters:
    ///   - viewArns: A list of Amazon resource names (ARNs) that identify the views you want details for.
    ///   - logger: Logger use during operation
    @inlinable
    public func batchGetView(
        viewArns: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> BatchGetViewOutput {
        let input = BatchGetViewInput(
            viewArns: viewArns
        )
        return try await self.batchGetView(input, logger: logger)
    }

    /// Turns on Amazon Web Services Resource Explorer in the Amazon Web Services Region in which you called this operation by creating an index. Resource Explorer begins discovering the resources in this Region and stores the details about the resources in the index so that they can be queried by using the Search operation. You can create only one index in a Region.  This operation creates only a local index. To promote the local index in one Amazon Web Services Region into the aggregator index for the Amazon Web Services account, use the UpdateIndexType operation. For more information, see Turning on cross-Region search by creating an aggregator index in the Amazon Web Services Resource Explorer User Guide.  For more details about what happens when you turn on Resource Explorer in an Amazon Web Services Region, see Turn on Resource Explorer to index your resources in an Amazon Web Services Region in the Amazon Web Services Resource Explorer User Guide. If this is the first Amazon Web Services Region in which you've created an index for Resource Explorer, then this operation also creates a service-linked role in your Amazon Web Services account that allows Resource Explorer to enumerate your resources to populate the index.    Action: resource-explorer-2:CreateIndex   Resource: The ARN of the index (as it will exist after the operation completes) in the Amazon Web Services Region and account in which you're trying to create the index. Use the wildcard character (*) at the end of the string to match the eventual UUID. For example, the following Resource element restricts the role or user to creating an index in only the us-east-2 Region of the specified account.  "Resource": "arn:aws:resource-explorer-2:us-west-2:&lt;account-id&gt;:index/*"  Alternatively, you can use "Resource": "*" to allow the role or user to create an index in any Region.    Action: iam:CreateServiceLinkedRole   Resource: No specific resource (*).  This permission is required only the first time you create an index to turn on Resource Explorer in the account. Resource Explorer uses this to create the service-linked role needed to index the resources in your account. Resource Explorer uses the same service-linked role for all additional indexes you create afterwards.
    @Sendable
    @inlinable
    public func createIndex(_ input: CreateIndexInput, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateIndexOutput {
        try await self.client.execute(
            operation: "CreateIndex", 
            path: "/CreateIndex", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Turns on Amazon Web Services Resource Explorer in the Amazon Web Services Region in which you called this operation by creating an index. Resource Explorer begins discovering the resources in this Region and stores the details about the resources in the index so that they can be queried by using the Search operation. You can create only one index in a Region.  This operation creates only a local index. To promote the local index in one Amazon Web Services Region into the aggregator index for the Amazon Web Services account, use the UpdateIndexType operation. For more information, see Turning on cross-Region search by creating an aggregator index in the Amazon Web Services Resource Explorer User Guide.  For more details about what happens when you turn on Resource Explorer in an Amazon Web Services Region, see Turn on Resource Explorer to index your resources in an Amazon Web Services Region in the Amazon Web Services Resource Explorer User Guide. If this is the first Amazon Web Services Region in which you've created an index for Resource Explorer, then this operation also creates a service-linked role in your Amazon Web Services account that allows Resource Explorer to enumerate your resources to populate the index.    Action: resource-explorer-2:CreateIndex   Resource: The ARN of the index (as it will exist after the operation completes) in the Amazon Web Services Region and account in which you're trying to create the index. Use the wildcard character (*) at the end of the string to match the eventual UUID. For example, the following Resource element restricts the role or user to creating an index in only the us-east-2 Region of the specified account.  "Resource": "arn:aws:resource-explorer-2:us-west-2:&lt;account-id&gt;:index/*"  Alternatively, you can use "Resource": "*" to allow the role or user to create an index in any Region.    Action: iam:CreateServiceLinkedRole   Resource: No specific resource (*).  This permission is required only the first time you create an index to turn on Resource Explorer in the account. Resource Explorer uses this to create the service-linked role needed to index the resources in your account. Resource Explorer uses the same service-linked role for all additional indexes you create afterwards.
    ///
    /// Parameters:
    ///   - clientToken: This value helps ensure idempotency. Resource Explorer uses this value to prevent the accidental creation of duplicate versions. We recommend that you generate a UUID-type value to ensure the uniqueness of your index.
    ///   - tags: The specified tags are attached only to the index created in this Amazon Web Services Region. The tags aren't attached to any of the resources listed in the index.
    ///   - logger: Logger use during operation
    @inlinable
    public func createIndex(
        clientToken: String? = CreateIndexInput.idempotencyToken(),
        tags: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateIndexOutput {
        let input = CreateIndexInput(
            clientToken: clientToken, 
            tags: tags
        )
        return try await self.createIndex(input, logger: logger)
    }

    /// Creates a Resource Explorer setup configuration across multiple Amazon Web Services Regions. This operation sets up indexes and views in the specified Regions. This operation can also be used to set an aggregator Region for cross-Region resource search.
    @Sendable
    @inlinable
    public func createResourceExplorerSetup(_ input: CreateResourceExplorerSetupInput, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateResourceExplorerSetupOutput {
        try await self.client.execute(
            operation: "CreateResourceExplorerSetup", 
            path: "/CreateResourceExplorerSetup", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a Resource Explorer setup configuration across multiple Amazon Web Services Regions. This operation sets up indexes and views in the specified Regions. This operation can also be used to set an aggregator Region for cross-Region resource search.
    ///
    /// Parameters:
    ///   - aggregatorRegions: A list of Amazon Web Services Regions that should be configured as aggregator Regions. Aggregator Regions receive replicated index information from all other Regions where there is a user-owned index.
    ///   - regionList: A list of Amazon Web Services Regions where Resource Explorer should be configured. Each Region in the list will have a user-owned index created.
    ///   - viewName: The name for the view to be created as part of the Resource Explorer setup. The view name must be unique within the Amazon Web Services account and Region.
    ///   - logger: Logger use during operation
    @inlinable
    public func createResourceExplorerSetup(
        aggregatorRegions: [String]? = nil,
        regionList: [String],
        viewName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateResourceExplorerSetupOutput {
        let input = CreateResourceExplorerSetupInput(
            aggregatorRegions: aggregatorRegions, 
            regionList: regionList, 
            viewName: viewName
        )
        return try await self.createResourceExplorerSetup(input, logger: logger)
    }

    /// Creates a view that users can query by using the Search operation. Results from queries that you make using this view include only resources that match the view's Filters. For more information about Amazon Web Services Resource Explorer views, see Managing views in the Amazon Web Services Resource Explorer User Guide. Only the principals with an IAM identity-based policy that grants Allow to the Search action on a Resource with the Amazon resource name (ARN) of this view can Search using views you create with this operation.
    @Sendable
    @inlinable
    public func createView(_ input: CreateViewInput, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateViewOutput {
        try await self.client.execute(
            operation: "CreateView", 
            path: "/CreateView", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a view that users can query by using the Search operation. Results from queries that you make using this view include only resources that match the view's Filters. For more information about Amazon Web Services Resource Explorer views, see Managing views in the Amazon Web Services Resource Explorer User Guide. Only the principals with an IAM identity-based policy that grants Allow to the Search action on a Resource with the Amazon resource name (ARN) of this view can Search using views you create with this operation.
    ///
    /// Parameters:
    ///   - clientToken: This value helps ensure idempotency. Resource Explorer uses this value to prevent the accidental creation of duplicate versions. We recommend that you generate a UUID-type value to ensure the uniqueness of your views.
    ///   - filters: An array of strings that specify which resources are included in the results of queries made using this view. When you use this view in a Search operation, the filter string is combined with the search's QueryString parameter using a logical AND operator. For information about the supported syntax, see Search query reference for Resource Explorer in the Amazon Web Services Resource Explorer User Guide.  This query string in the context of this operation supports only filter prefixes with optional operators. It doesn't support free-form text. For example, the string region:us* service:ec2 -tag:stage=prod includes all Amazon EC2 resources in any Amazon Web Services Region that begins with the letters us and is not tagged with a key Stage that has the value prod.
    ///   - includedProperties: Specifies optional fields that you want included in search results from this view. It is a list of objects that each describe a field to include. The default is an empty list, with no optional fields included in the results.
    ///   - scope: The root ARN of the account, an organizational unit (OU), or an organization ARN. If left empty, the default is account.
    ///   - tags: Tag key and value pairs that are attached to the view.
    ///   - viewName: The name of the new view. This name appears in the list of views in Resource Explorer. The name must be no more than 64 characters long, and can include letters, digits, and the dash (-) character. The name must be unique within its Amazon Web Services Region.
    ///   - logger: Logger use during operation
    @inlinable
    public func createView(
        clientToken: String? = CreateViewInput.idempotencyToken(),
        filters: SearchFilter? = nil,
        includedProperties: [IncludedProperty]? = nil,
        scope: String? = nil,
        tags: [String: String]? = nil,
        viewName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateViewOutput {
        let input = CreateViewInput(
            clientToken: clientToken, 
            filters: filters, 
            includedProperties: includedProperties, 
            scope: scope, 
            tags: tags, 
            viewName: viewName
        )
        return try await self.createView(input, logger: logger)
    }

    /// Deletes the specified index and turns off Amazon Web Services Resource Explorer in the specified Amazon Web Services Region. When you delete an index, Resource Explorer stops discovering and indexing resources in that Region. Resource Explorer also deletes all views in that Region. These actions occur as asynchronous background tasks. You can check to see when the actions are complete by using the GetIndex operation and checking the Status response value.  If the index you delete is the aggregator index for the Amazon Web Services account, you must wait 24 hours before you can promote another local index to be the aggregator index for the account. Users can't perform account-wide searches using Resource Explorer until another aggregator index is configured.
    @Sendable
    @inlinable
    public func deleteIndex(_ input: DeleteIndexInput, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteIndexOutput {
        try await self.client.execute(
            operation: "DeleteIndex", 
            path: "/DeleteIndex", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the specified index and turns off Amazon Web Services Resource Explorer in the specified Amazon Web Services Region. When you delete an index, Resource Explorer stops discovering and indexing resources in that Region. Resource Explorer also deletes all views in that Region. These actions occur as asynchronous background tasks. You can check to see when the actions are complete by using the GetIndex operation and checking the Status response value.  If the index you delete is the aggregator index for the Amazon Web Services account, you must wait 24 hours before you can promote another local index to be the aggregator index for the account. Users can't perform account-wide searches using Resource Explorer until another aggregator index is configured.
    ///
    /// Parameters:
    ///   - arn: The Amazon resource name (ARN) of the index that you want to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteIndex(
        arn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteIndexOutput {
        let input = DeleteIndexInput(
            arn: arn
        )
        return try await self.deleteIndex(input, logger: logger)
    }

    /// Deletes a Resource Explorer setup configuration. This operation removes indexes and views from the specified Regions or all Regions where Resource Explorer is configured.
    @Sendable
    @inlinable
    public func deleteResourceExplorerSetup(_ input: DeleteResourceExplorerSetupInput, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteResourceExplorerSetupOutput {
        try await self.client.execute(
            operation: "DeleteResourceExplorerSetup", 
            path: "/DeleteResourceExplorerSetup", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a Resource Explorer setup configuration. This operation removes indexes and views from the specified Regions or all Regions where Resource Explorer is configured.
    ///
    /// Parameters:
    ///   - deleteInAllRegions: Specifies whether to delete Resource Explorer configuration from all Regions where it is currently enabled. If this parameter is set to true, a value for RegionList must not be provided. Otherwise, the operation fails with a ValidationException error.
    ///   - regionList: A list of Amazon Web Services Regions from which to delete the Resource Explorer configuration. If not specified, the operation uses the DeleteInAllRegions parameter to determine scope.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteResourceExplorerSetup(
        deleteInAllRegions: Bool? = nil,
        regionList: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteResourceExplorerSetupOutput {
        let input = DeleteResourceExplorerSetupInput(
            deleteInAllRegions: deleteInAllRegions, 
            regionList: regionList
        )
        return try await self.deleteResourceExplorerSetup(input, logger: logger)
    }

    /// Deletes the specified view. If the specified view is the default view for its Amazon Web Services Region, then all Search operations in that Region must explicitly specify the view to use until you configure a new default by calling the AssociateDefaultView operation.
    @Sendable
    @inlinable
    public func deleteView(_ input: DeleteViewInput, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteViewOutput {
        try await self.client.execute(
            operation: "DeleteView", 
            path: "/DeleteView", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the specified view. If the specified view is the default view for its Amazon Web Services Region, then all Search operations in that Region must explicitly specify the view to use until you configure a new default by calling the AssociateDefaultView operation.
    ///
    /// Parameters:
    ///   - viewArn: The Amazon resource name (ARN) of the view that you want to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteView(
        viewArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteViewOutput {
        let input = DeleteViewInput(
            viewArn: viewArn
        )
        return try await self.deleteView(input, logger: logger)
    }

    /// After you call this operation, the affected Amazon Web Services Region no longer has a default view. All Search operations in that Region must explicitly specify a view or the operation fails. You can configure a new default by calling the AssociateDefaultView operation. If an Amazon Web Services Region doesn't have a default view configured, then users must explicitly specify a view with every Search operation performed in that Region.
    @Sendable
    @inlinable
    public func disassociateDefaultView(logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DisassociateDefaultView", 
            path: "/DisassociateDefaultView", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            logger: logger
        )
    }

    /// Retrieves the status of your account's Amazon Web Services service access, and validates the service linked role required to access the multi-account search feature. Only the management account can invoke this API call.
    @Sendable
    @inlinable
    public func getAccountLevelServiceConfiguration(logger: Logger = AWSClient.loggingDisabled) async throws -> GetAccountLevelServiceConfigurationOutput {
        try await self.client.execute(
            operation: "GetAccountLevelServiceConfiguration", 
            path: "/GetAccountLevelServiceConfiguration", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            logger: logger
        )
    }

    /// Retrieves the Amazon Resource Name (ARN) of the view that is the default for the Amazon Web Services Region in which you call this operation. You can then call GetView to retrieve the details of that view.
    @Sendable
    @inlinable
    public func getDefaultView(logger: Logger = AWSClient.loggingDisabled) async throws -> GetDefaultViewOutput {
        try await self.client.execute(
            operation: "GetDefaultView", 
            path: "/GetDefaultView", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            logger: logger
        )
    }

    /// Retrieves details about the Amazon Web Services Resource Explorer index in the Amazon Web Services Region in which you invoked the operation.
    @Sendable
    @inlinable
    public func getIndex(logger: Logger = AWSClient.loggingDisabled) async throws -> GetIndexOutput {
        try await self.client.execute(
            operation: "GetIndex", 
            path: "/GetIndex", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            logger: logger
        )
    }

    /// Retrieves details of the specified Amazon Web Services-managed view.
    @Sendable
    @inlinable
    public func getManagedView(_ input: GetManagedViewInput, logger: Logger = AWSClient.loggingDisabled) async throws -> GetManagedViewOutput {
        try await self.client.execute(
            operation: "GetManagedView", 
            path: "/GetManagedView", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves details of the specified Amazon Web Services-managed view.
    ///
    /// Parameters:
    ///   - managedViewArn: The Amazon resource name (ARN) of the managed view.
    ///   - logger: Logger use during operation
    @inlinable
    public func getManagedView(
        managedViewArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetManagedViewOutput {
        let input = GetManagedViewInput(
            managedViewArn: managedViewArn
        )
        return try await self.getManagedView(input, logger: logger)
    }

    /// Retrieves the status and details of a Resource Explorer setup operation. This operation returns information about the progress of creating or deleting Resource Explorer configurations across Regions.
    @Sendable
    @inlinable
    public func getResourceExplorerSetup(_ input: GetResourceExplorerSetupInput, logger: Logger = AWSClient.loggingDisabled) async throws -> GetResourceExplorerSetupOutput {
        try await self.client.execute(
            operation: "GetResourceExplorerSetup", 
            path: "/GetResourceExplorerSetup", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves the status and details of a Resource Explorer setup operation. This operation returns information about the progress of creating or deleting Resource Explorer configurations across Regions.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of Region status results to return in a single response. Valid values are between 1 and 100.
    ///   - nextToken: The pagination token from a previous GetResourceExplorerSetup response. Use this token to retrieve the next set of results.
    ///   - taskId: The unique identifier of the setup task to retrieve status information for. This ID is returned by CreateResourceExplorerSetup or DeleteResourceExplorerSetup operations.
    ///   - logger: Logger use during operation
    @inlinable
    public func getResourceExplorerSetup(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        taskId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetResourceExplorerSetupOutput {
        let input = GetResourceExplorerSetupInput(
            maxResults: maxResults, 
            nextToken: nextToken, 
            taskId: taskId
        )
        return try await self.getResourceExplorerSetup(input, logger: logger)
    }

    /// Retrieves information about the Resource Explorer index in the current Amazon Web Services Region. This operation returns the ARN and type of the index if one exists.
    @Sendable
    @inlinable
    public func getServiceIndex(logger: Logger = AWSClient.loggingDisabled) async throws -> GetServiceIndexOutput {
        try await self.client.execute(
            operation: "GetServiceIndex", 
            path: "/GetServiceIndex", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            logger: logger
        )
    }

    /// Retrieves details about a specific Resource Explorer service view. This operation returns the configuration and properties of the specified view.
    @Sendable
    @inlinable
    public func getServiceView(_ input: GetServiceViewInput, logger: Logger = AWSClient.loggingDisabled) async throws -> GetServiceViewOutput {
        try await self.client.execute(
            operation: "GetServiceView", 
            path: "/GetServiceView", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves details about a specific Resource Explorer service view. This operation returns the configuration and properties of the specified view.
    ///
    /// Parameters:
    ///   - serviceViewArn: The Amazon Resource Name (ARN) of the service view to retrieve details for.
    ///   - logger: Logger use during operation
    @inlinable
    public func getServiceView(
        serviceViewArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetServiceViewOutput {
        let input = GetServiceViewInput(
            serviceViewArn: serviceViewArn
        )
        return try await self.getServiceView(input, logger: logger)
    }

    /// Retrieves details of the specified view.
    @Sendable
    @inlinable
    public func getView(_ input: GetViewInput, logger: Logger = AWSClient.loggingDisabled) async throws -> GetViewOutput {
        try await self.client.execute(
            operation: "GetView", 
            path: "/GetView", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves details of the specified view.
    ///
    /// Parameters:
    ///   - viewArn: The Amazon resource name (ARN) of the view that you want information about.
    ///   - logger: Logger use during operation
    @inlinable
    public func getView(
        viewArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetViewOutput {
        let input = GetViewInput(
            viewArn: viewArn
        )
        return try await self.getView(input, logger: logger)
    }

    /// Retrieves a list of all of the indexes in Amazon Web Services Regions that are currently collecting resource information for Amazon Web Services Resource Explorer.
    @Sendable
    @inlinable
    public func listIndexes(_ input: ListIndexesInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListIndexesOutput {
        try await self.client.execute(
            operation: "ListIndexes", 
            path: "/ListIndexes", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves a list of all of the indexes in Amazon Web Services Regions that are currently collecting resource information for Amazon Web Services Resource Explorer.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results that you want included on each page of the response. If you do not include this parameter, it defaults to a value appropriate to the operation. If additional items exist beyond those included in the current response, the NextToken response element is present and has a value (is not null). Include that value as the NextToken request parameter in the next call to the operation to get the next part of the results.  An API operation can return fewer results than the maximum even when there are more results available. You should check NextToken after every operation to ensure that you receive all of the results.
    ///   - nextToken: The parameter for receiving additional results if you receive a NextToken response in a previous request. A NextToken response indicates that more output is available. Set this parameter to the value of the previous call's NextToken response to indicate where the output should continue from. The pagination tokens expire after 24 hours.
    ///   - regions: If specified, limits the response to only information about the index in the specified list of Amazon Web Services Regions.
    ///   - type: If specified, limits the output to only indexes of the specified Type, either LOCAL or AGGREGATOR. Use this option to discover the aggregator index for your account.
    ///   - logger: Logger use during operation
    @inlinable
    public func listIndexes(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        regions: [String]? = nil,
        type: IndexType? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListIndexesOutput {
        let input = ListIndexesInput(
            maxResults: maxResults, 
            nextToken: nextToken, 
            regions: regions, 
            type: type
        )
        return try await self.listIndexes(input, logger: logger)
    }

    /// Retrieves a list of a member's indexes in all Amazon Web Services Regions that are currently collecting resource information for Amazon Web Services Resource Explorer. Only the management account or a delegated administrator with service access enabled can invoke this API call.
    @Sendable
    @inlinable
    public func listIndexesForMembers(_ input: ListIndexesForMembersInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListIndexesForMembersOutput {
        try await self.client.execute(
            operation: "ListIndexesForMembers", 
            path: "/ListIndexesForMembers", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves a list of a member's indexes in all Amazon Web Services Regions that are currently collecting resource information for Amazon Web Services Resource Explorer. Only the management account or a delegated administrator with service access enabled can invoke this API call.
    ///
    /// Parameters:
    ///   - accountIdList: The account IDs will limit the output to only indexes from these accounts.
    ///   - maxResults: The maximum number of results that you want included on each page of the response. If you do not include this parameter, it defaults to a value appropriate to the operation. If additional items exist beyond those included in the current response, the NextToken response element is present and has a value (is not null). Include that value as the NextToken request parameter in the next call to the operation to get the next part of the results.  An API operation can return fewer results than the maximum even when there are more results available. You should check NextToken after every operation to ensure that you receive all of the results.
    ///   - nextToken: The parameter for receiving additional results if you receive a NextToken response in a previous request. A NextToken response indicates that more output is available. Set this parameter to the value of the previous call's NextToken response to indicate where the output should continue from. The pagination tokens expire after 24 hours.
    ///   - logger: Logger use during operation
    @inlinable
    public func listIndexesForMembers(
        accountIdList: [String],
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListIndexesForMembersOutput {
        let input = ListIndexesForMembersInput(
            accountIdList: accountIdList, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listIndexesForMembers(input, logger: logger)
    }

    /// Lists the Amazon resource names (ARNs) of the Amazon Web Services-managed views available in the Amazon Web Services Region in which you call this operation.
    @Sendable
    @inlinable
    public func listManagedViews(_ input: ListManagedViewsInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListManagedViewsOutput {
        try await self.client.execute(
            operation: "ListManagedViews", 
            path: "/ListManagedViews", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the Amazon resource names (ARNs) of the Amazon Web Services-managed views available in the Amazon Web Services Region in which you call this operation.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results that you want included on each page of the response. If you do not include this parameter, it defaults to a value appropriate to the operation. If additional items exist beyond those included in the current response, the NextToken response element is present and has a value (is not null). Include that value as the NextToken request parameter in the next call to the operation to get the next part of the results.  An API operation can return fewer results than the maximum even when there are more results available. You should check NextToken after every operation to ensure that you receive all of the results.
    ///   - nextToken: The parameter for receiving additional results if you receive a NextToken response in a previous request. A NextToken response indicates that more output is available. Set this parameter to the value of the previous call's NextToken response to indicate where the output should continue from. The pagination tokens expire after 24 hours.
    ///   - servicePrincipal: Specifies a service principal name. If specified, then the operation only returns the managed views that are managed by the input service.
    ///   - logger: Logger use during operation
    @inlinable
    public func listManagedViews(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        servicePrincipal: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListManagedViewsOutput {
        let input = ListManagedViewsInput(
            maxResults: maxResults, 
            nextToken: nextToken, 
            servicePrincipal: servicePrincipal
        )
        return try await self.listManagedViews(input, logger: logger)
    }

    /// Returns a list of resources and their details that match the specified criteria. This query must use a view. If you don’t explicitly specify a view, then Resource Explorer uses the default view for the Amazon Web Services Region in which you call this operation.
    @Sendable
    @inlinable
    public func listResources(_ input: ListResourcesInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListResourcesOutput {
        try await self.client.execute(
            operation: "ListResources", 
            path: "/ListResources", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of resources and their details that match the specified criteria. This query must use a view. If you don’t explicitly specify a view, then Resource Explorer uses the default view for the Amazon Web Services Region in which you call this operation.
    ///
    /// Parameters:
    ///   - filters: An array of strings that specify which resources are included in the results of queries made using this view. When you use this view in a Search operation, the filter string is combined with the search's QueryString parameter using a logical AND operator. For information about the supported syntax, see Search query reference for Resource Explorer in the Amazon Web Services Resource Explorer User Guide.  This query string in the context of this operation supports only filter prefixes with optional operators. It doesn't support free-form text. For example, the string region:us* service:ec2 -tag:stage=prod includes all Amazon EC2 resources in any Amazon Web Services Region that begins with the letters us and is not tagged with a key Stage that has the value prod.
    ///   - maxResults: The maximum number of results that you want included on each page of the response. If you do not include this parameter, it defaults to a value appropriate to the operation. If additional items exist beyond those included in the current response, the NextToken response element is present and has a value (is not null). Include that value as the NextToken request parameter in the next call to the operation to get the next part of the results.  An API operation can return fewer results than the maximum even when there are more results available. You should check NextToken after every operation to ensure that you receive all of the results.
    ///   - nextToken: The parameter for receiving additional results if you receive a NextToken response in a previous request. A NextToken response indicates that more output is available. Set this parameter to the value of the previous call's NextToken response to indicate where the output should continue from. The pagination tokens expire after 24 hours.  The ListResources operation does not generate a NextToken if you set MaxResults to 1000.
    ///   - viewArn: Specifies the Amazon resource name (ARN) of the view to use for the query. If you don't specify a value for this parameter, then the operation automatically uses the default view for the Amazon Web Services Region in which you called this operation. If the Region either doesn't have a default view or if you don't have permission to use the default view, then the operation fails with a 401 Unauthorized exception.
    ///   - logger: Logger use during operation
    @inlinable
    public func listResources(
        filters: SearchFilter? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        viewArn: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListResourcesOutput {
        let input = ListResourcesInput(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            viewArn: viewArn
        )
        return try await self.listResources(input, logger: logger)
    }

    /// Lists all Resource Explorer indexes across the specified Amazon Web Services Regions. This operation returns information about indexes including their ARNs, types, and Regions.
    @Sendable
    @inlinable
    public func listServiceIndexes(_ input: ListServiceIndexesInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListServiceIndexesOutput {
        try await self.client.execute(
            operation: "ListServiceIndexes", 
            path: "/ListServiceIndexes", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all Resource Explorer indexes across the specified Amazon Web Services Regions. This operation returns information about indexes including their ARNs, types, and Regions.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of index results to return in a single response. Valid values are between 1 and 100.
    ///   - nextToken: The pagination token from a previous ListServiceIndexes response. Use this token to retrieve the next set of results.
    ///   - regions: A list of Amazon Web Services Regions to include in the search for indexes. If not specified, indexes from all Regions are returned.
    ///   - logger: Logger use during operation
    @inlinable
    public func listServiceIndexes(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        regions: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListServiceIndexesOutput {
        let input = ListServiceIndexesInput(
            maxResults: maxResults, 
            nextToken: nextToken, 
            regions: regions
        )
        return try await self.listServiceIndexes(input, logger: logger)
    }

    /// Lists all Resource Explorer service views available in the current Amazon Web Services account. This operation returns the ARNs of available service views.
    @Sendable
    @inlinable
    public func listServiceViews(_ input: ListServiceViewsInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListServiceViewsOutput {
        try await self.client.execute(
            operation: "ListServiceViews", 
            path: "/ListServiceViews", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all Resource Explorer service views available in the current Amazon Web Services account. This operation returns the ARNs of available service views.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of service view results to return in a single response. Valid values are between 1 and 50.
    ///   - nextToken: The pagination token from a previous ListServiceViews response. Use this token to retrieve the next set of results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listServiceViews(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListServiceViewsOutput {
        let input = ListServiceViewsInput(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listServiceViews(input, logger: logger)
    }

    /// Returns a list of Amazon Web Services services that have been granted streaming access to your Resource Explorer data. Streaming access allows Amazon Web Services services to receive real-time updates about your resources as they are indexed by Resource Explorer.
    @Sendable
    @inlinable
    public func listStreamingAccessForServices(_ input: ListStreamingAccessForServicesInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListStreamingAccessForServicesOutput {
        try await self.client.execute(
            operation: "ListStreamingAccessForServices", 
            path: "/ListStreamingAccessForServices", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of Amazon Web Services services that have been granted streaming access to your Resource Explorer data. Streaming access allows Amazon Web Services services to receive real-time updates about your resources as they are indexed by Resource Explorer.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of streaming access entries to return in the response. If there are more results available, the response includes a NextToken value that you can use in a subsequent call to get the next set of results. The value must be between 1 and 50. If you don't specify a value, the default is 50.
    ///   - nextToken: The parameter for receiving additional results if you receive a NextToken response in a previous request. A NextToken response indicates that more output is available. Set this parameter to the value of the previous call's NextToken response to indicate where the output should continue from. The pagination tokens expire after 24 hours.
    ///   - logger: Logger use during operation
    @inlinable
    public func listStreamingAccessForServices(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListStreamingAccessForServicesOutput {
        let input = ListStreamingAccessForServicesInput(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listStreamingAccessForServices(input, logger: logger)
    }

    /// Retrieves a list of all resource types currently supported by Amazon Web Services Resource Explorer.
    @Sendable
    @inlinable
    public func listSupportedResourceTypes(_ input: ListSupportedResourceTypesInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListSupportedResourceTypesOutput {
        try await self.client.execute(
            operation: "ListSupportedResourceTypes", 
            path: "/ListSupportedResourceTypes", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves a list of all resource types currently supported by Amazon Web Services Resource Explorer.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results that you want included on each page of the response. If you do not include this parameter, it defaults to a value appropriate to the operation. If additional items exist beyond those included in the current response, the NextToken response element is present and has a value (is not null). Include that value as the NextToken request parameter in the next call to the operation to get the next part of the results.  An API operation can return fewer results than the maximum even when there are more results available. You should check NextToken after every operation to ensure that you receive all of the results.
    ///   - nextToken: The parameter for receiving additional results if you receive a NextToken response in a previous request. A NextToken response indicates that more output is available. Set this parameter to the value of the previous call's NextToken response to indicate where the output should continue from. The pagination tokens expire after 24 hours.
    ///   - logger: Logger use during operation
    @inlinable
    public func listSupportedResourceTypes(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListSupportedResourceTypesOutput {
        let input = ListSupportedResourceTypesInput(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listSupportedResourceTypes(input, logger: logger)
    }

    /// Lists the tags that are attached to the specified resource.
    @Sendable
    @inlinable
    public func listTagsForResource(_ input: ListTagsForResourceInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListTagsForResourceOutput {
        try await self.client.execute(
            operation: "ListTagsForResource", 
            path: "/tags/{resourceArn}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the tags that are attached to the specified resource.
    ///
    /// Parameters:
    ///   - resourceArn: The Amazon resource name (ARN) of the view or index that you want to attach tags to.
    ///   - logger: Logger use during operation
    @inlinable
    public func listTagsForResource(
        resourceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListTagsForResourceOutput {
        let input = ListTagsForResourceInput(
            resourceArn: resourceArn
        )
        return try await self.listTagsForResource(input, logger: logger)
    }

    /// Lists the Amazon resource names (ARNs) of the views available in the Amazon Web Services Region in which you call this operation.  Always check the NextToken response parameter for a null value when calling a paginated operation. These operations can occasionally return an empty set of results even when there are more results available. The NextToken response parameter value is null only when there are no more results to display.
    @Sendable
    @inlinable
    public func listViews(_ input: ListViewsInput, logger: Logger = AWSClient.loggingDisabled) async throws -> ListViewsOutput {
        try await self.client.execute(
            operation: "ListViews", 
            path: "/ListViews", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the Amazon resource names (ARNs) of the views available in the Amazon Web Services Region in which you call this operation.  Always check the NextToken response parameter for a null value when calling a paginated operation. These operations can occasionally return an empty set of results even when there are more results available. The NextToken response parameter value is null only when there are no more results to display.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results that you want included on each page of the response. If you do not include this parameter, it defaults to a value appropriate to the operation. If additional items exist beyond those included in the current response, the NextToken response element is present and has a value (is not null). Include that value as the NextToken request parameter in the next call to the operation to get the next part of the results.  An API operation can return fewer results than the maximum even when there are more results available. You should check NextToken after every operation to ensure that you receive all of the results.
    ///   - nextToken: The parameter for receiving additional results if you receive a NextToken response in a previous request. A NextToken response indicates that more output is available. Set this parameter to the value of the previous call's NextToken response to indicate where the output should continue from. The pagination tokens expire after 24 hours.
    ///   - logger: Logger use during operation
    @inlinable
    public func listViews(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListViewsOutput {
        let input = ListViewsInput(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listViews(input, logger: logger)
    }

    /// Searches for resources and displays details about all resources that match the specified criteria. You must specify a query string. All search queries must use a view. If you don't explicitly specify a view, then Amazon Web Services Resource Explorer uses the default view for the Amazon Web Services Region in which you call this operation. The results are the logical intersection of the results that match both the QueryString parameter supplied to this operation and the SearchFilter parameter attached to the view. For the complete syntax supported by the QueryString parameter, see Search query syntax reference for Resource Explorer. If your search results are empty, or are missing results that you think should be there, see Troubleshooting Resource Explorer search.
    @Sendable
    @inlinable
    public func search(_ input: SearchInput, logger: Logger = AWSClient.loggingDisabled) async throws -> SearchOutput {
        try await self.client.execute(
            operation: "Search", 
            path: "/Search", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Searches for resources and displays details about all resources that match the specified criteria. You must specify a query string. All search queries must use a view. If you don't explicitly specify a view, then Amazon Web Services Resource Explorer uses the default view for the Amazon Web Services Region in which you call this operation. The results are the logical intersection of the results that match both the QueryString parameter supplied to this operation and the SearchFilter parameter attached to the view. For the complete syntax supported by the QueryString parameter, see Search query syntax reference for Resource Explorer. If your search results are empty, or are missing results that you think should be there, see Troubleshooting Resource Explorer search.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results that you want included on each page of the response. If you do not include this parameter, it defaults to a value appropriate to the operation. If additional items exist beyond those included in the current response, the NextToken response element is present and has a value (is not null). Include that value as the NextToken request parameter in the next call to the operation to get the next part of the results.  An API operation can return fewer results than the maximum even when there are more results available. You should check NextToken after every operation to ensure that you receive all of the results.
    ///   - nextToken: The parameter for receiving additional results if you receive a NextToken response in a previous request. A NextToken response indicates that more output is available. Set this parameter to the value of the previous call's NextToken response to indicate where the output should continue from. The pagination tokens expire after 24 hours.
    ///   - queryString: A string that includes keywords and filters that specify the resources that you want to include in the results. For the complete syntax supported by the QueryString parameter, see Search query syntax reference for Resource Explorer. The search is completely case insensitive. You can specify an empty string to return all results up to the limit of 1,000 total results.  The operation can return only the first 1,000 results. If the resource you want is not included, then use a different value for QueryString to refine the results.
    ///   - viewArn: Specifies the Amazon resource name (ARN) of the view to use for the query. If you don't specify a value for this parameter, then the operation automatically uses the default view for the Amazon Web Services Region in which you called this operation. If the Region either doesn't have a default view or if you don't have permission to use the default view, then the operation fails with a 401 Unauthorized exception.
    ///   - logger: Logger use during operation
    @inlinable
    public func search(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        queryString: String,
        viewArn: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> SearchOutput {
        let input = SearchInput(
            maxResults: maxResults, 
            nextToken: nextToken, 
            queryString: queryString, 
            viewArn: viewArn
        )
        return try await self.search(input, logger: logger)
    }

    /// Adds one or more tag key and value pairs to an Amazon Web Services Resource Explorer view or index.
    @Sendable
    @inlinable
    public func tagResource(_ input: TagResourceInput, logger: Logger = AWSClient.loggingDisabled) async throws -> TagResourceOutput {
        try await self.client.execute(
            operation: "TagResource", 
            path: "/tags/{resourceArn}", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Adds one or more tag key and value pairs to an Amazon Web Services Resource Explorer view or index.
    ///
    /// Parameters:
    ///   - resourceArn: The Amazon Resource Name (ARN) of the view or index that you want to attach tags to.
    ///   - tags: A list of tag key and value pairs that you want to attach to the specified view or index.
    ///   - logger: Logger use during operation
    @inlinable
    public func tagResource(
        resourceArn: String,
        tags: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> TagResourceOutput {
        let input = TagResourceInput(
            resourceArn: resourceArn, 
            tags: tags
        )
        return try await self.tagResource(input, logger: logger)
    }

    /// Removes one or more tag key and value pairs from an Amazon Web Services Resource Explorer view or index.
    @Sendable
    @inlinable
    public func untagResource(_ input: UntagResourceInput, logger: Logger = AWSClient.loggingDisabled) async throws -> UntagResourceOutput {
        try await self.client.execute(
            operation: "UntagResource", 
            path: "/tags/{resourceArn}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Removes one or more tag key and value pairs from an Amazon Web Services Resource Explorer view or index.
    ///
    /// Parameters:
    ///   - resourceArn: The Amazon Resource Name (ARN) of the view or index that you want to remove tags from.
    ///   - tagKeys: A list of the keys for the tags that you want to remove from the specified view or index.
    ///   - logger: Logger use during operation
    @inlinable
    public func untagResource(
        resourceArn: String,
        tagKeys: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UntagResourceOutput {
        let input = UntagResourceInput(
            resourceArn: resourceArn, 
            tagKeys: tagKeys
        )
        return try await self.untagResource(input, logger: logger)
    }

    /// Changes the type of the index from one of the following types to the other. For more information about indexes and the role they perform in Amazon Web Services Resource Explorer, see Turning on cross-Region search by creating an aggregator index in the Amazon Web Services Resource Explorer User Guide.     AGGREGATOR index type  The index contains information about resources from all Amazon Web Services Regions in the Amazon Web Services account in which you've created a Resource Explorer index. Resource information from all other Regions is replicated to this Region's index. When you change the index type to AGGREGATOR, Resource Explorer turns on replication of all discovered resource information from the other Amazon Web Services Regions in your account to this index. You can then, from this Region only, perform resource search queries that span all Amazon Web Services Regions in the Amazon Web Services account. Turning on replication from all other Regions is performed by asynchronous background tasks. You can check the status of the asynchronous tasks by using the GetIndex operation. When the asynchronous tasks complete, the Status response of that operation changes from UPDATING to ACTIVE. After that, you can start to see results from other Amazon Web Services Regions in query results. However, it can take several hours for replication from all other Regions to complete.  You can have only one aggregator index per Amazon Web Services account. Before you can promote a different index to be the aggregator index for the account, you must first demote the existing aggregator index to type LOCAL.      LOCAL index type  The index contains information about resources in only the Amazon Web Services Region in which the index exists. If an aggregator index in another Region exists, then information in this local index is replicated to the aggregator index. When you change the index type to LOCAL, Resource Explorer turns off the replication of resource information from all other Amazon Web Services Regions in the Amazon Web Services account to this Region. The aggregator index remains in the UPDATING state until all replication with other Regions successfully stops. You can check the status of the asynchronous task by using the GetIndex operation. When Resource Explorer successfully stops all replication with other Regions, the Status response of that operation changes from UPDATING to ACTIVE. Separately, the resource information from other Regions that was previously stored in the index is deleted within 30 days by another background task. Until that asynchronous task completes, some results from other Regions can continue to appear in search results.  After you demote an aggregator index to a local index, you must wait 24 hours before you can promote another index to be the new aggregator index for the account.
    @Sendable
    @inlinable
    public func updateIndexType(_ input: UpdateIndexTypeInput, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateIndexTypeOutput {
        try await self.client.execute(
            operation: "UpdateIndexType", 
            path: "/UpdateIndexType", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Changes the type of the index from one of the following types to the other. For more information about indexes and the role they perform in Amazon Web Services Resource Explorer, see Turning on cross-Region search by creating an aggregator index in the Amazon Web Services Resource Explorer User Guide.     AGGREGATOR index type  The index contains information about resources from all Amazon Web Services Regions in the Amazon Web Services account in which you've created a Resource Explorer index. Resource information from all other Regions is replicated to this Region's index. When you change the index type to AGGREGATOR, Resource Explorer turns on replication of all discovered resource information from the other Amazon Web Services Regions in your account to this index. You can then, from this Region only, perform resource search queries that span all Amazon Web Services Regions in the Amazon Web Services account. Turning on replication from all other Regions is performed by asynchronous background tasks. You can check the status of the asynchronous tasks by using the GetIndex operation. When the asynchronous tasks complete, the Status response of that operation changes from UPDATING to ACTIVE. After that, you can start to see results from other Amazon Web Services Regions in query results. However, it can take several hours for replication from all other Regions to complete.  You can have only one aggregator index per Amazon Web Services account. Before you can promote a different index to be the aggregator index for the account, you must first demote the existing aggregator index to type LOCAL.      LOCAL index type  The index contains information about resources in only the Amazon Web Services Region in which the index exists. If an aggregator index in another Region exists, then information in this local index is replicated to the aggregator index. When you change the index type to LOCAL, Resource Explorer turns off the replication of resource information from all other Amazon Web Services Regions in the Amazon Web Services account to this Region. The aggregator index remains in the UPDATING state until all replication with other Regions successfully stops. You can check the status of the asynchronous task by using the GetIndex operation. When Resource Explorer successfully stops all replication with other Regions, the Status response of that operation changes from UPDATING to ACTIVE. Separately, the resource information from other Regions that was previously stored in the index is deleted within 30 days by another background task. Until that asynchronous task completes, some results from other Regions can continue to appear in search results.  After you demote an aggregator index to a local index, you must wait 24 hours before you can promote another index to be the new aggregator index for the account.
    ///
    /// Parameters:
    ///   - arn: The Amazon resource name (ARN) of the index that you want to update.
    ///   - type: The type of the index. To understand the difference between LOCAL and AGGREGATOR, see Turning on cross-Region search in the Amazon Web Services Resource Explorer User Guide.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateIndexType(
        arn: String,
        type: IndexType,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateIndexTypeOutput {
        let input = UpdateIndexTypeInput(
            arn: arn, 
            type: type
        )
        return try await self.updateIndexType(input, logger: logger)
    }

    /// Modifies some of the details of a view. You can change the filter string and the list of included properties. You can't change the name of the view.
    @Sendable
    @inlinable
    public func updateView(_ input: UpdateViewInput, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateViewOutput {
        try await self.client.execute(
            operation: "UpdateView", 
            path: "/UpdateView", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Modifies some of the details of a view. You can change the filter string and the list of included properties. You can't change the name of the view.
    ///
    /// Parameters:
    ///   - filters: An array of strings that specify which resources are included in the results of queries made using this view. When you use this view in a Search operation, the filter string is combined with the search's QueryString parameter using a logical AND operator. For information about the supported syntax, see Search query reference for Resource Explorer in the Amazon Web Services Resource Explorer User Guide.  This query string in the context of this operation supports only filter prefixes with optional operators. It doesn't support free-form text. For example, the string region:us* service:ec2 -tag:stage=prod includes all Amazon EC2 resources in any Amazon Web Services Region that begins with the letters us and is not tagged with a key Stage that has the value prod.
    ///   - includedProperties: Specifies optional fields that you want included in search results from this view. It is a list of objects that each describe a field to include. The default is an empty list, with no optional fields included in the results.
    ///   - viewArn: The Amazon resource name (ARN) of the view that you want to modify.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateView(
        filters: SearchFilter? = nil,
        includedProperties: [IncludedProperty]? = nil,
        viewArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateViewOutput {
        let input = UpdateViewInput(
            filters: filters, 
            includedProperties: includedProperties, 
            viewArn: viewArn
        )
        return try await self.updateView(input, logger: logger)
    }
}

extension ResourceExplorer2 {
    /// Initializer required by `AWSService.with(middlewares:timeout:byteBufferAllocator:options)`. You are not able to use this initializer directly as there are not public
    /// initializers for `AWSServiceConfig.Patch`. Please use `AWSService.with(middlewares:timeout:byteBufferAllocator:options)` instead.
    public init(from: ResourceExplorer2, patch: AWSServiceConfig.Patch) {
        self.client = from.client
        self.config = from.config.with(patch: patch)
    }
}

// MARK: Paginators

@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *)
extension ResourceExplorer2 {
    /// Return PaginatorSequence for operation ``getResourceExplorerSetup(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getResourceExplorerSetupPaginator(
        _ input: GetResourceExplorerSetupInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetResourceExplorerSetupInput, GetResourceExplorerSetupOutput> {
        return .init(
            input: input,
            command: self.getResourceExplorerSetup,
            inputKey: \GetResourceExplorerSetupInput.nextToken,
            outputKey: \GetResourceExplorerSetupOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getResourceExplorerSetup(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of Region status results to return in a single response. Valid values are between 1 and 100.
    ///   - taskId: The unique identifier of the setup task to retrieve status information for. This ID is returned by CreateResourceExplorerSetup or DeleteResourceExplorerSetup operations.
    ///   - logger: Logger used for logging
    @inlinable
    public func getResourceExplorerSetupPaginator(
        maxResults: Int? = nil,
        taskId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetResourceExplorerSetupInput, GetResourceExplorerSetupOutput> {
        let input = GetResourceExplorerSetupInput(
            maxResults: maxResults, 
            taskId: taskId
        )
        return self.getResourceExplorerSetupPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listIndexes(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listIndexesPaginator(
        _ input: ListIndexesInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListIndexesInput, ListIndexesOutput> {
        return .init(
            input: input,
            command: self.listIndexes,
            inputKey: \ListIndexesInput.nextToken,
            outputKey: \ListIndexesOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listIndexes(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results that you want included on each page of the response. If you do not include this parameter, it defaults to a value appropriate to the operation. If additional items exist beyond those included in the current response, the NextToken response element is present and has a value (is not null). Include that value as the NextToken request parameter in the next call to the operation to get the next part of the results.  An API operation can return fewer results than the maximum even when there are more results available. You should check NextToken after every operation to ensure that you receive all of the results.
    ///   - regions: If specified, limits the response to only information about the index in the specified list of Amazon Web Services Regions.
    ///   - type: If specified, limits the output to only indexes of the specified Type, either LOCAL or AGGREGATOR. Use this option to discover the aggregator index for your account.
    ///   - logger: Logger used for logging
    @inlinable
    public func listIndexesPaginator(
        maxResults: Int? = nil,
        regions: [String]? = nil,
        type: IndexType? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListIndexesInput, ListIndexesOutput> {
        let input = ListIndexesInput(
            maxResults: maxResults, 
            regions: regions, 
            type: type
        )
        return self.listIndexesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listIndexesForMembers(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listIndexesForMembersPaginator(
        _ input: ListIndexesForMembersInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListIndexesForMembersInput, ListIndexesForMembersOutput> {
        return .init(
            input: input,
            command: self.listIndexesForMembers,
            inputKey: \ListIndexesForMembersInput.nextToken,
            outputKey: \ListIndexesForMembersOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listIndexesForMembers(_:logger:)``.
    ///
    /// - Parameters:
    ///   - accountIdList: The account IDs will limit the output to only indexes from these accounts.
    ///   - maxResults: The maximum number of results that you want included on each page of the response. If you do not include this parameter, it defaults to a value appropriate to the operation. If additional items exist beyond those included in the current response, the NextToken response element is present and has a value (is not null). Include that value as the NextToken request parameter in the next call to the operation to get the next part of the results.  An API operation can return fewer results than the maximum even when there are more results available. You should check NextToken after every operation to ensure that you receive all of the results.
    ///   - logger: Logger used for logging
    @inlinable
    public func listIndexesForMembersPaginator(
        accountIdList: [String],
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListIndexesForMembersInput, ListIndexesForMembersOutput> {
        let input = ListIndexesForMembersInput(
            accountIdList: accountIdList, 
            maxResults: maxResults
        )
        return self.listIndexesForMembersPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listManagedViews(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listManagedViewsPaginator(
        _ input: ListManagedViewsInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListManagedViewsInput, ListManagedViewsOutput> {
        return .init(
            input: input,
            command: self.listManagedViews,
            inputKey: \ListManagedViewsInput.nextToken,
            outputKey: \ListManagedViewsOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listManagedViews(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results that you want included on each page of the response. If you do not include this parameter, it defaults to a value appropriate to the operation. If additional items exist beyond those included in the current response, the NextToken response element is present and has a value (is not null). Include that value as the NextToken request parameter in the next call to the operation to get the next part of the results.  An API operation can return fewer results than the maximum even when there are more results available. You should check NextToken after every operation to ensure that you receive all of the results.
    ///   - servicePrincipal: Specifies a service principal name. If specified, then the operation only returns the managed views that are managed by the input service.
    ///   - logger: Logger used for logging
    @inlinable
    public func listManagedViewsPaginator(
        maxResults: Int? = nil,
        servicePrincipal: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListManagedViewsInput, ListManagedViewsOutput> {
        let input = ListManagedViewsInput(
            maxResults: maxResults, 
            servicePrincipal: servicePrincipal
        )
        return self.listManagedViewsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listResources(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listResourcesPaginator(
        _ input: ListResourcesInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListResourcesInput, ListResourcesOutput> {
        return .init(
            input: input,
            command: self.listResources,
            inputKey: \ListResourcesInput.nextToken,
            outputKey: \ListResourcesOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listResources(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: An array of strings that specify which resources are included in the results of queries made using this view. When you use this view in a Search operation, the filter string is combined with the search's QueryString parameter using a logical AND operator. For information about the supported syntax, see Search query reference for Resource Explorer in the Amazon Web Services Resource Explorer User Guide.  This query string in the context of this operation supports only filter prefixes with optional operators. It doesn't support free-form text. For example, the string region:us* service:ec2 -tag:stage=prod includes all Amazon EC2 resources in any Amazon Web Services Region that begins with the letters us and is not tagged with a key Stage that has the value prod.
    ///   - maxResults: The maximum number of results that you want included on each page of the response. If you do not include this parameter, it defaults to a value appropriate to the operation. If additional items exist beyond those included in the current response, the NextToken response element is present and has a value (is not null). Include that value as the NextToken request parameter in the next call to the operation to get the next part of the results.  An API operation can return fewer results than the maximum even when there are more results available. You should check NextToken after every operation to ensure that you receive all of the results.
    ///   - viewArn: Specifies the Amazon resource name (ARN) of the view to use for the query. If you don't specify a value for this parameter, then the operation automatically uses the default view for the Amazon Web Services Region in which you called this operation. If the Region either doesn't have a default view or if you don't have permission to use the default view, then the operation fails with a 401 Unauthorized exception.
    ///   - logger: Logger used for logging
    @inlinable
    public func listResourcesPaginator(
        filters: SearchFilter? = nil,
        maxResults: Int? = nil,
        viewArn: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListResourcesInput, ListResourcesOutput> {
        let input = ListResourcesInput(
            filters: filters, 
            maxResults: maxResults, 
            viewArn: viewArn
        )
        return self.listResourcesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listServiceIndexes(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listServiceIndexesPaginator(
        _ input: ListServiceIndexesInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListServiceIndexesInput, ListServiceIndexesOutput> {
        return .init(
            input: input,
            command: self.listServiceIndexes,
            inputKey: \ListServiceIndexesInput.nextToken,
            outputKey: \ListServiceIndexesOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listServiceIndexes(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of index results to return in a single response. Valid values are between 1 and 100.
    ///   - regions: A list of Amazon Web Services Regions to include in the search for indexes. If not specified, indexes from all Regions are returned.
    ///   - logger: Logger used for logging
    @inlinable
    public func listServiceIndexesPaginator(
        maxResults: Int? = nil,
        regions: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListServiceIndexesInput, ListServiceIndexesOutput> {
        let input = ListServiceIndexesInput(
            maxResults: maxResults, 
            regions: regions
        )
        return self.listServiceIndexesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listServiceViews(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listServiceViewsPaginator(
        _ input: ListServiceViewsInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListServiceViewsInput, ListServiceViewsOutput> {
        return .init(
            input: input,
            command: self.listServiceViews,
            inputKey: \ListServiceViewsInput.nextToken,
            outputKey: \ListServiceViewsOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listServiceViews(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of service view results to return in a single response. Valid values are between 1 and 50.
    ///   - logger: Logger used for logging
    @inlinable
    public func listServiceViewsPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListServiceViewsInput, ListServiceViewsOutput> {
        let input = ListServiceViewsInput(
            maxResults: maxResults
        )
        return self.listServiceViewsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listStreamingAccessForServices(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listStreamingAccessForServicesPaginator(
        _ input: ListStreamingAccessForServicesInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListStreamingAccessForServicesInput, ListStreamingAccessForServicesOutput> {
        return .init(
            input: input,
            command: self.listStreamingAccessForServices,
            inputKey: \ListStreamingAccessForServicesInput.nextToken,
            outputKey: \ListStreamingAccessForServicesOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listStreamingAccessForServices(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of streaming access entries to return in the response. If there are more results available, the response includes a NextToken value that you can use in a subsequent call to get the next set of results. The value must be between 1 and 50. If you don't specify a value, the default is 50.
    ///   - logger: Logger used for logging
    @inlinable
    public func listStreamingAccessForServicesPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListStreamingAccessForServicesInput, ListStreamingAccessForServicesOutput> {
        let input = ListStreamingAccessForServicesInput(
            maxResults: maxResults
        )
        return self.listStreamingAccessForServicesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listSupportedResourceTypes(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listSupportedResourceTypesPaginator(
        _ input: ListSupportedResourceTypesInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListSupportedResourceTypesInput, ListSupportedResourceTypesOutput> {
        return .init(
            input: input,
            command: self.listSupportedResourceTypes,
            inputKey: \ListSupportedResourceTypesInput.nextToken,
            outputKey: \ListSupportedResourceTypesOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listSupportedResourceTypes(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results that you want included on each page of the response. If you do not include this parameter, it defaults to a value appropriate to the operation. If additional items exist beyond those included in the current response, the NextToken response element is present and has a value (is not null). Include that value as the NextToken request parameter in the next call to the operation to get the next part of the results.  An API operation can return fewer results than the maximum even when there are more results available. You should check NextToken after every operation to ensure that you receive all of the results.
    ///   - logger: Logger used for logging
    @inlinable
    public func listSupportedResourceTypesPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListSupportedResourceTypesInput, ListSupportedResourceTypesOutput> {
        let input = ListSupportedResourceTypesInput(
            maxResults: maxResults
        )
        return self.listSupportedResourceTypesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listViews(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listViewsPaginator(
        _ input: ListViewsInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListViewsInput, ListViewsOutput> {
        return .init(
            input: input,
            command: self.listViews,
            inputKey: \ListViewsInput.nextToken,
            outputKey: \ListViewsOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listViews(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results that you want included on each page of the response. If you do not include this parameter, it defaults to a value appropriate to the operation. If additional items exist beyond those included in the current response, the NextToken response element is present and has a value (is not null). Include that value as the NextToken request parameter in the next call to the operation to get the next part of the results.  An API operation can return fewer results than the maximum even when there are more results available. You should check NextToken after every operation to ensure that you receive all of the results.
    ///   - logger: Logger used for logging
    @inlinable
    public func listViewsPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListViewsInput, ListViewsOutput> {
        let input = ListViewsInput(
            maxResults: maxResults
        )
        return self.listViewsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``search(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func searchPaginator(
        _ input: SearchInput,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<SearchInput, SearchOutput> {
        return .init(
            input: input,
            command: self.search,
            inputKey: \SearchInput.nextToken,
            outputKey: \SearchOutput.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``search(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results that you want included on each page of the response. If you do not include this parameter, it defaults to a value appropriate to the operation. If additional items exist beyond those included in the current response, the NextToken response element is present and has a value (is not null). Include that value as the NextToken request parameter in the next call to the operation to get the next part of the results.  An API operation can return fewer results than the maximum even when there are more results available. You should check NextToken after every operation to ensure that you receive all of the results.
    ///   - queryString: A string that includes keywords and filters that specify the resources that you want to include in the results. For the complete syntax supported by the QueryString parameter, see Search query syntax reference for Resource Explorer. The search is completely case insensitive. You can specify an empty string to return all results up to the limit of 1,000 total results.  The operation can return only the first 1,000 results. If the resource you want is not included, then use a different value for QueryString to refine the results.
    ///   - viewArn: Specifies the Amazon resource name (ARN) of the view to use for the query. If you don't specify a value for this parameter, then the operation automatically uses the default view for the Amazon Web Services Region in which you called this operation. If the Region either doesn't have a default view or if you don't have permission to use the default view, then the operation fails with a 401 Unauthorized exception.
    ///   - logger: Logger used for logging
    @inlinable
    public func searchPaginator(
        maxResults: Int? = nil,
        queryString: String,
        viewArn: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<SearchInput, SearchOutput> {
        let input = SearchInput(
            maxResults: maxResults, 
            queryString: queryString, 
            viewArn: viewArn
        )
        return self.searchPaginator(input, logger: logger)
    }
}

extension ResourceExplorer2.GetResourceExplorerSetupInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> ResourceExplorer2.GetResourceExplorerSetupInput {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            taskId: self.taskId
        )
    }
}

extension ResourceExplorer2.ListIndexesForMembersInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> ResourceExplorer2.ListIndexesForMembersInput {
        return .init(
            accountIdList: self.accountIdList,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension ResourceExplorer2.ListIndexesInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> ResourceExplorer2.ListIndexesInput {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            regions: self.regions,
            type: self.type
        )
    }
}

extension ResourceExplorer2.ListManagedViewsInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> ResourceExplorer2.ListManagedViewsInput {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            servicePrincipal: self.servicePrincipal
        )
    }
}

extension ResourceExplorer2.ListResourcesInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> ResourceExplorer2.ListResourcesInput {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token,
            viewArn: self.viewArn
        )
    }
}

extension ResourceExplorer2.ListServiceIndexesInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> ResourceExplorer2.ListServiceIndexesInput {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            regions: self.regions
        )
    }
}

extension ResourceExplorer2.ListServiceViewsInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> ResourceExplorer2.ListServiceViewsInput {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension ResourceExplorer2.ListStreamingAccessForServicesInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> ResourceExplorer2.ListStreamingAccessForServicesInput {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension ResourceExplorer2.ListSupportedResourceTypesInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> ResourceExplorer2.ListSupportedResourceTypesInput {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension ResourceExplorer2.ListViewsInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> ResourceExplorer2.ListViewsInput {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension ResourceExplorer2.SearchInput: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> ResourceExplorer2.SearchInput {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            queryString: self.queryString,
            viewArn: self.viewArn
        )
    }
}
